﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using RegistroMascotas.Modelo;
using System.Configuration;

namespace Data
{
    public class MascotaDAO
    {
        #region Atributos
            private static SqlConnection _conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CadenaConn"].ConnectionString);
            private static SqlCommand _comm;
            //private static SqlDataAdapter _adapter;    
        #endregion         

        /* TABLA CHAPITA */
        
        /*public static bool crearChapita(Chapita chap, Mascota pet)
            {
                bool exito = false;

                try
                {
                    _conn.Open();

                    _comm.Connection = _conn;
                    _comm.CommandType = CommandType.StoredProcedure;
                    _comm.CommandText = "sp_Chapitas_CrearChapita";

                    _comm.Parameters.Clear();

                    _comm.Parameters.Add("@estado", SqlDbType.VarChar, 23);
                    _comm.Parameters[0].Value = chap.Estado;

                    _comm.Parameters.Add("@codAlfanumerico", SqlDbType.VarChar, 12);
                    _comm.Parameters[1].Value = chap.CodigoAlfanumerico;

                    _comm.Parameters.Add("@idMascota", SqlDbType.Int);
                    _comm.Parameters[2].Value = pet.IdMascota;

                    _comm.Parameters.Add("@idChapita", SqlDbType.Int);
                    _comm.Parameters[3].Direction = ParameterDirection.Output;

                    _comm.ExecuteScalar();

                    exito = true;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    _conn.Close();
                }

                return exito;
            }*/

        public static bool modificarChapita(Chapita c)
            {
                bool exito = false;

                try
                {
                    _comm = new SqlCommand();
                    _comm.Connection = _conn;
                    _comm.CommandType = CommandType.StoredProcedure;
                    _comm.CommandText = "sp_Chapitas_ModificarChapita";

                    _comm.Parameters.Add("@estado", SqlDbType.VarChar, 23);
                    _comm.Parameters[0].Value = c.Estado;

                    _comm.Parameters.Add("@idChapita", SqlDbType.Int);
                    _comm.Parameters[1].Value = c.IdChapita;

                    _conn.Open();

                    _comm.ExecuteScalar();

                    exito = true;
                }
                catch (Exception e)
                {
                    throw e;
                }
                finally
                {
                    _conn.Close();
                }

                return exito;
            }

        public static Chapita obtenerChapitaPorId(int idChapita)
            {
                DataTable dtChapitas = new DataTable();
                SqlDataAdapter adapter;
                Chapita c = null;

                try
                {
                    _comm = new SqlCommand();
                    _comm.Connection = _conn;

                    _comm.CommandType = CommandType.StoredProcedure;
                    _comm.CommandText = "sp_Chapitas_ObtenerPorId";

                    _comm.Parameters.Add("@idChapita", SqlDbType.Int);
                    _comm.Parameters[0].Value = idChapita;

                    _conn.Open();

                    adapter = new SqlDataAdapter();
                    adapter.SelectCommand = _comm;
                    adapter.Fill(dtChapitas);

                    foreach (DataRow row in dtChapitas.Rows)
                    {
                        c = new Chapita();

                        c.IdChapita = int.Parse(row["IdChapita"].ToString());
                        c.Estado = row["Estado"].ToString();
                        c.CodigoAlfanumerico = row["CodigoAlfanumerico"].ToString();
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    _conn.Close();
                }

                return c;
            }

        /* TABLA HISTORIA CLINICA */

        public static bool modificarMascotaHechaPorVeterinario(int idMascota, HistoriaClinica h)
        {
            bool exito = false;

            _comm = new SqlCommand();
            _comm.Connection = _conn;
            _comm.CommandType = CommandType.StoredProcedure;

            _comm.CommandText = "sp_Mascotas_ModificarMascotaHechaPorVeterinario";

            _comm.Parameters.Add("@idMascota", SqlDbType.Int);
            _comm.Parameters[0].Value = idMascota;

            _comm.Parameters.Add("@enfermedades", SqlDbType.VarChar, 100);
            _comm.Parameters[1].Value = h.Enfermedades;

            _comm.Parameters.Add("@medicacion", SqlDbType.VarChar, 100);
            _comm.Parameters[2].Value = h.Medicacion;

            _comm.Parameters.Add("@castrado", SqlDbType.Bit);
            _comm.Parameters[3].Value = h.Castrado;

            _comm.Parameters.Add("@operado", SqlDbType.Bit);
            _comm.Parameters[4].Value = h.Operado;

            _comm.Parameters.Add("@vacunas", SqlDbType.VarChar, 100);
            _comm.Parameters[5].Value = h.Vacunas;

            _comm.Parameters.Add("@observaciones", SqlDbType.VarChar, 100);
            _comm.Parameters[6].Value = h.Observaciones;

            try
            {
                _conn.Open();
                _comm.ExecuteScalar();
                exito = true;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                _conn.Close();
            }

            return exito;
        }

        public static HistoriaClinica obtenerHistoriaClinica(int idMascota)
        {
            HistoriaClinica hC = null;

            DataTable dtHistoriaClinica = new DataTable();
            SqlDataAdapter adapter;

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;

                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Mascotas_TraerHistoriaClinica";

                _comm.Parameters.Add("@idMascota", SqlDbType.Int);
                _comm.Parameters[0].Value = idMascota;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtHistoriaClinica);

                foreach (DataRow historiaClinica in dtHistoriaClinica.Rows)
                {
                    hC = new HistoriaClinica();

                    hC.IdHistoriaClinica = int.Parse(historiaClinica["IdHistoriaClinica"].ToString());
                    hC.Enfermedades = historiaClinica["Enfermedades"].ToString();
                    hC.Medicacion = historiaClinica["Medicacion"].ToString();
                    hC.Castrado = bool.Parse(historiaClinica["Castrado"].ToString());
                    hC.Operado = bool.Parse(historiaClinica["Operado"].ToString());
                    hC.Vacunas = historiaClinica["Vacunas"].ToString();
                    hC.Observaciones = historiaClinica["Observaciones"].ToString();
                    hC.FechaCreacion = DateTime.Parse(historiaClinica["FechaCreacion"].ToString());

                    if (historiaClinica["FechaUltimaModificacion"].ToString() != "")
                        hC.FechaUltimaModificacion = DateTime.Parse(historiaClinica["FechaUltimaModificacion"].ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return hC;
        }

        //MASCOTA / HISTORIA CLINICA

        public static bool crearMascota(Mascota pet, SqlConnection conn, SqlTransaction tran, bool hayTransaccion)
        {
            bool exito = false;

            try
            {
                _comm = new SqlCommand();

                _comm.Transaction = tran;
                _comm.CommandType = CommandType.StoredProcedure;
                _comm.Connection = conn;

                /*************************************** CREACION DE LA MASCOTA *******************************/
                _comm.Parameters.Clear();
                _comm.CommandText = "sp_Mascotas_Crear";

                _comm.Parameters.Add("@nombre", SqlDbType.VarChar, 15);
                _comm.Parameters[0].Value = pet.Nombre;

                _comm.Parameters.Add("@apellido", SqlDbType.VarChar, 20);
                _comm.Parameters[1].Value = pet.Apellido;

                _comm.Parameters.Add("@raza", SqlDbType.VarChar, 15);
                _comm.Parameters[2].Value = pet.Raza;

                _comm.Parameters.Add("@pasoZoonosis", SqlDbType.Bit);
                _comm.Parameters[3].Value = pet.PasoZoonosis;

                _comm.Parameters.Add("@nombreZoonosis", SqlDbType.VarChar, 50);
                _comm.Parameters[4].Value = pet.NombreZoonosis;

                _comm.Parameters.Add("@motivoZoonosis", SqlDbType.VarChar, 50);
                _comm.Parameters[5].Value = pet.MotivoZoonosis;
                
                _comm.Parameters.Add("@cantVecesPerdido", SqlDbType.Int);
                _comm.Parameters[6].Value = pet.CantVecesPerdido;

                _comm.Parameters.Add("@cantSalidasPais", SqlDbType.Int);
                _comm.Parameters[7].Value = pet.CantSalidasPais;

                _comm.Parameters.Add("@cantSalidasProv", SqlDbType.Int);
                _comm.Parameters[8].Value = pet.CantSalidasProv;

                _comm.Parameters.Add("@estado", SqlDbType.VarChar, 11);
                _comm.Parameters[9].Value = pet.Estado;

                _comm.Parameters.Add("@caracteristicas", SqlDbType.VarChar, 100);
                _comm.Parameters[10].Value = pet.Caracteristicas;

                _comm.Parameters.Add("@imagen", SqlDbType.NText);
                if (pet.Imagen == null)
                    _comm.Parameters[11].Value = DBNull.Value;
                else
                    _comm.Parameters[11].Value = pet.Imagen;

                _comm.Parameters.Add("@idDueño", SqlDbType.Int);
                _comm.Parameters[12].Value = pet.Dueño;

                _comm.Parameters.Add("@idMascota", SqlDbType.Int);
                _comm.Parameters[13].Direction = ParameterDirection.Output;

                _comm.Parameters.Add("@sexo", SqlDbType.VarChar, 6);
                _comm.Parameters[14].Value = pet.Sexo;

                _comm.ExecuteScalar();

                pet.IdMascota = int.Parse(_comm.Parameters[13].Value.ToString());
                /************************************* CREACION DE LA HISTORIA CLINICA *************************/
                _comm.Parameters.Clear();
                _comm.CommandText = "sp_HistoriasClinica_Crear";

                _comm.Parameters.Add("@enfermedades", SqlDbType.VarChar, 100);
                _comm.Parameters[0].Value = pet.HistoriaClinica.Enfermedades;

                _comm.Parameters.Add("@medicacion", SqlDbType.VarChar, 100);
                _comm.Parameters[1].Value = pet.HistoriaClinica.Medicacion;

                _comm.Parameters.Add("@castrado", SqlDbType.Bit);
                _comm.Parameters[2].Value = pet.HistoriaClinica.Castrado;

                _comm.Parameters.Add("@operado", SqlDbType.Bit);
                _comm.Parameters[3].Value = pet.HistoriaClinica.Operado;

                _comm.Parameters.Add("@vacunas", SqlDbType.VarChar, 100);
                _comm.Parameters[4].Value = pet.HistoriaClinica.Vacunas;

                _comm.Parameters.Add("@observaciones", SqlDbType.VarChar, 100);
                _comm.Parameters[5].Value = pet.HistoriaClinica.Observaciones;

                _comm.Parameters.Add("@idMascota", SqlDbType.Int);
                _comm.Parameters[6].Value = pet.IdMascota;

                _comm.ExecuteScalar();

                /************************************* CREACION DE LA CHAPITA *************************/
                _comm.Parameters.Clear();
                _comm.CommandText = "sp_Chapitas_CrearChapita";
                
                _comm.Parameters.Add("@estado", SqlDbType.VarChar, 23);
                _comm.Parameters[0].Value = EstadoChapita.Peticionada_Y_Creada.ToString();

                _comm.Parameters.Add("@codAlfanumerico", SqlDbType.VarChar, 12);
                _comm.Parameters[1].Value = crearCodigoAlfanumerico(pet);

                _comm.Parameters.Add("@idMascota", SqlDbType.Int);
                _comm.Parameters[2].Value = pet.IdMascota;

                _comm.Parameters.Add("@idChapita", SqlDbType.Int);
                _comm.Parameters[3].Direction = ParameterDirection.Output;

                _comm.ExecuteScalar();
                tran.Commit();
                hayTransaccion = false;
                exito = true;
            }
            catch (Exception ex)
            {
                if (hayTransaccion)
                    tran.Rollback();

                throw ex;
            }
            finally
            {
                conn.Close();
            }
            return exito;
        }        
        
        /* TABLA MASCOTA */
        
        public static Mascota obtenerMascotaPorCodigoAlternativo(string codigo){
            DataTable dtMascota = new DataTable();
            SqlDataAdapter adapter;
            Mascota mascota = null;

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;

                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Mascota_TraerPorCodigo";

                _comm.Parameters.Add("@codigo", SqlDbType.VarChar, 12);
                _comm.Parameters[0].Value = codigo;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtMascota);

                foreach (DataRow pet in dtMascota.Rows)
                {
                    mascota = new Mascota();

                    mascota.IdMascota = int.Parse(pet["IdMascota"].ToString());
                    mascota.Nombre = pet["Nombre"].ToString();
                    mascota.Apellido = pet["Apellido"].ToString();
                    mascota.Raza = pet["Raza"].ToString();
                    mascota.PasoZoonosis = bool.Parse(pet["PasoZoonosis"].ToString());
                    mascota.MotivoZoonosis = pet["MotivoZoonosis"].ToString();
                    mascota.CantVecesPerdido = int.Parse(pet["cantVecesPerdido"].ToString());
                    mascota.CantSalidasPais = int.Parse(pet["cantSalidasPais"].ToString());
                    mascota.CantSalidasProv = int.Parse(pet["cantSalidasProv"].ToString());
                    mascota.Estado = pet["Estado"].ToString();
                    mascota.Caracteristicas = pet["Caracteristicas"].ToString();
                    mascota.Dueño = int.Parse(pet["IdDueño"].ToString());
                    mascota.Imagen = pet["Imagen"].ToString();
                    mascota.FechaCreacion = DateTime.Parse(pet["FechaCreacion"].ToString());

                    if (pet["FechaUltimaModificacion"].ToString() != "")
                        mascota.FechaUltimaModificacion = DateTime.Parse(pet["FechaUltimaModificacion"].ToString());

                    mascota.IdChapita = int.Parse(pet["IdChapita"].ToString());
                    mascota.Sexo = pet["Sexo"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return mascota;
        }

        public static Mascota obtenerMascotaPorId(int id)
        {
            DataTable dtMascota = new DataTable();
            SqlDataAdapter adapter;
            Mascota mascota = null;

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;

                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Mascota_TraerPorId";

                _comm.Parameters.Add("@idMascota", SqlDbType.Int);
                _comm.Parameters[0].Value = id;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtMascota);

                foreach (DataRow pet in dtMascota.Rows)
                {
                    mascota = new Mascota();

                    mascota.IdMascota = int.Parse(pet["IdMascota"].ToString());
                    mascota.Nombre = pet["Nombre"].ToString();
                    mascota.Apellido = pet["Apellido"].ToString();
                    mascota.Raza = pet["Raza"].ToString();
                    mascota.PasoZoonosis = bool.Parse(pet["PasoZoonosis"].ToString());
                    mascota.MotivoZoonosis = pet["MotivoZoonosis"].ToString();
                    mascota.CantVecesPerdido = int.Parse(pet["cantVecesPerdido"].ToString());
                    mascota.CantSalidasPais = int.Parse(pet["cantSalidasPais"].ToString());
                    mascota.CantSalidasProv = int.Parse(pet["cantSalidasProv"].ToString());
                    mascota.Estado = pet["Estado"].ToString();
                    mascota.Caracteristicas = pet["Caracteristicas"].ToString();
                    mascota.Dueño = int.Parse(pet["IdDueño"].ToString());
                    mascota.Imagen = pet["Imagen"].ToString();
                    mascota.FechaCreacion = DateTime.Parse(pet["FechaCreacion"].ToString());

                    if (pet["FechaUltimaModificacion"].ToString() != "")
                        mascota.FechaUltimaModificacion = DateTime.Parse(pet["FechaUltimaModificacion"].ToString());

                    mascota.Sexo = pet["Sexo"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return mascota;
        }

        public static bool modificarMascotaHechaPorDueño(int idMascota, string estado, string cadenaImagen) {
            bool exito = false;

            _comm = new SqlCommand();
            _comm.Connection = _conn;
            _comm.CommandType = CommandType.StoredProcedure;

            _comm.CommandText = "sp_Mascotas_ModificarMascotaHechaPorDueño";

            _comm.Parameters.Add("@idMascota", SqlDbType.Int);
            _comm.Parameters[0].Value = idMascota;

            _comm.Parameters.Add("@estado", SqlDbType.VarChar, 11);
            _comm.Parameters[1].Value = estado;

            _comm.Parameters.Add("@imagen", SqlDbType.NText);
            _comm.Parameters[2].Value = cadenaImagen;
            
            try
            {
                _conn.Open();
                _comm.ExecuteScalar();
                exito = true;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                _conn.Close();
            }

            return exito;
        }        
        
        public static Dueño obtenerDueño(int idDueño) {
            Dueño d = null;

            DataTable dtDueño = new DataTable();
            SqlDataAdapter adapter;

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;

                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Mascotas_TraerDueño";

                _comm.Parameters.Add("@idDueñoMascota", SqlDbType.Int);
                _comm.Parameters[0].Value = idDueño;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtDueño);

                foreach (DataRow dueñito in dtDueño.Rows)
                {
                    d = new Dueño();

                    d.Nombre = dueñito["Nombre"].ToString();
                    d.Telefono = dueñito["Telefono"].ToString();
                    d.Celular = dueñito["Telefono2"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return d;
        }
        
        public static Mascota obtenerMascotaDetalle(int idMascota) {
            DataTable dtMascota = new DataTable();
            SqlDataAdapter adapter;
            Mascota mascota = null;

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;

                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Mascotas_TraerMascota";

                _comm.Parameters.Add("@idMascota", SqlDbType.Int);
                _comm.Parameters[0].Value = idMascota;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtMascota);

                foreach (DataRow pet in dtMascota.Rows)
                {
                    mascota = new Mascota();

                    mascota.IdMascota = int.Parse(pet["IdMascota"].ToString());
                    mascota.Nombre = pet["Nombre"].ToString();
                    mascota.Apellido = pet["Apellido"].ToString();
                    mascota.Raza = pet["Raza"].ToString();
                    mascota.PasoZoonosis = bool.Parse(pet["PasoZoonosis"].ToString());
                    mascota.MotivoZoonosis = pet["MotivoZoonosis"].ToString();
                    mascota.CantVecesPerdido = int.Parse(pet["cantVecesPerdido"].ToString());
                    mascota.CantSalidasPais = int.Parse(pet["cantSalidasPais"].ToString());
                    mascota.CantSalidasProv = int.Parse(pet["cantSalidasProv"].ToString());
                    mascota.Estado = pet["Estado"].ToString();
                    mascota.Caracteristicas = pet["Caracteristicas"].ToString();
                    mascota.Dueño = int.Parse(pet["IdDueño"].ToString());
                    mascota.Imagen = pet["Imagen"].ToString();
                    mascota.FechaCreacion = DateTime.Parse(pet["FechaCreacion"].ToString());

                    if (pet["FechaUltimaModificacion"].ToString() != "")
                        mascota.FechaUltimaModificacion = DateTime.Parse(pet["FechaUltimaModificacion"].ToString());

                    mascota.Sexo = pet["Sexo"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return mascota;
        }

        public static DataTable obtenerMascotasRegistradasPorDia(DateTime dia)
        {
            DataTable dtMascotas = new DataTable();
            SqlDataAdapter adapter;

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;
                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Mascotas_TraerRegistradasPorDia";

                _comm.Parameters.Add("@dia", DbType.Date);
                _comm.Parameters[0].Value = dia;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtMascotas);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return dtMascotas;
        }

        public static bool adoptarMascota(int idMascota, int idPersona)
        {
            bool exito = false;

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;
                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Mascotas_Adoptar";

                _comm.Parameters.Add("@idMascota", SqlDbType.Int);
                _comm.Parameters[0].Value = idMascota;

                _comm.Parameters.Add("@idPersona", SqlDbType.Int);
                _comm.Parameters[1].Value = idPersona;

                _conn.Open();

                _comm.ExecuteScalar();

                exito = true;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                _conn.Close();
            }

            return exito;
        }
        
        public static Dueño obtenerDueñoPorIdMascota(int idMascota)
        {
            Dueño d = null;
            DataTable dtMuni = new DataTable();
            SqlDataAdapter adapter;

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;

                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Mascotas_obtenerDueño";

                _comm.Parameters.Add("@idMascota", SqlDbType.Int);
                _comm.Parameters[0].Value = idMascota;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtMuni);

                foreach (DataRow row in dtMuni.Rows)
                {
                    d = new Dueño();

                    d.IdPersona = int.Parse(row["IdPersona"].ToString());
                    d.Nombre = row["Nombre"].ToString();
                    d.Dni = long.Parse(row["DniCuitMatricula"].ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return d;
        }

        public static List<string> obtenerMascotaParaExportar(string idMascota)
        {
            DataTable dtMascota = new DataTable();
            SqlDataAdapter adapter;
            Mascota mascota = null;
            HistoriaClinica hc = null;
            List<string> listaDatos = new List<string>();

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;

                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Mascotas_TraerParaExportar";

                _comm.Parameters.Add("@idMascota", SqlDbType.Int);
                _comm.Parameters[0].Value = idMascota;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtMascota);

                foreach (DataRow pet in dtMascota.Rows)
                {
                    listaDatos.Add("Nombre de la Mascota: " + pet["Nombre"].ToString());
                    listaDatos.Add("Apellido de la Mascota: " + pet["Apellido"].ToString());
                    listaDatos.Add("Raza de la Mascota: " + pet["Raza"].ToString());
                    listaDatos.Add("Nombre del Dueño: " + pet["NombreDueño"].ToString());

                    if (bool.Parse(pet["PasoZoonosis"].ToString()))
                        listaDatos.Add("Paso Zoonosis: Si");
                    else
                        listaDatos.Add("Paso Zoonosis: No");

                    listaDatos.Add("Nombre del Zoonosis: " + pet["NombreZoonosis"].ToString());
                    listaDatos.Add("Motivo del paso por Zoonosis: " + pet["MotivoZoonosis"].ToString());
                    listaDatos.Add("Cantidad de veces perdido: " + pet["cantVecesPerdido"].ToString());
                    listaDatos.Add("Cantidad de salidas del pais: " + pet["cantSalidasPais"].ToString());
                    listaDatos.Add("Cantidad de salidas de la provincia: " + pet["cantSalidasProv"].ToString());
                    listaDatos.Add("Estado de la Mascota: " + pet["Estado"].ToString());
                    listaDatos.Add("Caracteristicas de la Mascota: " + pet["Caracteristicas"].ToString());
                    listaDatos.Add((pet["IdDueño"].ToString()));
                    listaDatos.Add(pet["Imagen"].ToString());
                    listaDatos.Add("Enfermedades de la Mascota: " + pet["Enfermedades"].ToString());
                    listaDatos.Add("Medicación de la Mascota: " + pet["Medicacion"].ToString());

                    if (bool.Parse(pet["Castrado"].ToString()))
                        listaDatos.Add("Castrado: Si");
                    else
                        listaDatos.Add("Castrado: No");

                    if (bool.Parse(pet["Operado"].ToString()))
                        listaDatos.Add("Operado: Si");
                    else
                        listaDatos.Add("Operado: No");

                    listaDatos.Add("Vacunas de la Mascota: " + pet["Vacunas"].ToString());
                    listaDatos.Add("Observaciones: " + pet["Observaciones"].ToString());

                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return listaDatos;
        }

        /* TABLA PERSONAS */

        public static List<Dueño> obtenerMisDueños(string nombreDueño)
        {
            DataTable dtDueños = new DataTable();
            SqlDataAdapter adapter;
            List<Dueño> dueñitos = new List<Dueño>();
            Dueño miDueño = null;

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;

                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Personas_ObtenerDueñoPorNombre";

                _comm.Parameters.Add("@nombreDueño", SqlDbType.VarChar, 50);
                _comm.Parameters[0].Value = nombreDueño;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtDueños);

                foreach (DataRow dueñito in dtDueños.Rows)
                {                    
                    miDueño = new Dueño();

                    miDueño.IdPersona = int.Parse(dueñito["IdPersona"].ToString());
                    miDueño.Nombre = dueñito["Nombre"].ToString();
                    miDueño.Direccion = dueñito["Direccion"].ToString();
                    miDueño.Telefono = dueñito["Telefono"].ToString();
                    miDueño.Usuario = dueñito["Usuario"].ToString();
                    miDueño.Contraseña = dueñito["Contraseña"].ToString();
                    miDueño.Estado = dueñito["Estado"].ToString();
                    miDueño.Mail = dueñito["Mail"].ToString();
                    miDueño.Localidad = dueñito["Localidad"].ToString();
                    miDueño.Provincia = dueñito["Provincia"].ToString();
                    miDueño.Dni = long.Parse(dueñito["DniCuitMatricula"].ToString());
                    miDueño.Celular = dueñito["Telefono2"].ToString();
                    miDueño.CantDenuncias = int.Parse(dueñito["CantDenuncias"].ToString());
                    miDueño.TipoUsuario = int.Parse(dueñito["IdTipoUsuario"].ToString());
                    miDueño.Imagen = dueñito["Imagen"].ToString();
                    miDueño.Sexo = dueñito["Sexo"].ToString();

                    dueñitos.Add(miDueño);                    
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return dueñitos;
        }

        public static List<Veterinario> obtenerMisVeterinarios(string nombreVeterinario)
        {
            DataTable dtVeterinarios = new DataTable();
            SqlDataAdapter adapter;
            List<Veterinario> veterinaritos = new List<Veterinario>();
            Veterinario miVeterinario = null;

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;

                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Personas_ObtenerVeterinarioPorNombre";

                _comm.Parameters.Add("@nombreVeterinario", SqlDbType.VarChar, 50);
                _comm.Parameters[0].Value = nombreVeterinario;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtVeterinarios);

                foreach (DataRow dueñito in dtVeterinarios.Rows)
                {
                    miVeterinario = new Veterinario();

                    miVeterinario.IdPersona = int.Parse(dueñito["IdPersona"].ToString());
                    miVeterinario.Nombre = dueñito["Nombre"].ToString();
                    miVeterinario.Direccion = dueñito["Direccion"].ToString();
                    miVeterinario.Telefono = dueñito["Telefono"].ToString();
                    miVeterinario.Usuario = dueñito["Usuario"].ToString();
                    miVeterinario.Contraseña = dueñito["Contraseña"].ToString();
                    miVeterinario.Estado = dueñito["Estado"].ToString();
                    miVeterinario.Mail = dueñito["Mail"].ToString();
                    miVeterinario.Localidad = dueñito["Localidad"].ToString();
                    miVeterinario.Provincia = dueñito["Provincia"].ToString();
                    miVeterinario.Matricula = long.Parse(dueñito["DniCuitMatricula"].ToString());
                    miVeterinario.Celular = dueñito["Telefono2"].ToString();
                    miVeterinario.CantDenuncias = int.Parse(dueñito["CantDenuncias"].ToString());
                    miVeterinario.TipoUsuario = int.Parse(dueñito["IdTipoUsuario"].ToString());
                    miVeterinario.Imagen = dueñito["Imagen"].ToString();
                    miVeterinario.Sexo = dueñito["Sexo"].ToString();

                    veterinaritos.Add(miVeterinario);                    
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return veterinaritos;
        }                

        public static string obtenerMailMunicipio(int idMascota) {
            string mail = "";

            DataTable dtMuni = new DataTable();
            SqlDataAdapter adapter;
            
            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;

                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Personas_ObtenerMailMunicipio";

                _comm.Parameters.Add("@idMascota", SqlDbType.Int);
                _comm.Parameters[0].Value = idMascota;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtMuni);

                foreach (DataRow row in dtMuni.Rows)
                {
                    mail = row["Mail"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return mail;
        }

        public static List<Persona> buscarPorDniMatricula(long dniMatricula)
        {
            DataTable dtBuscados = new DataTable();
            SqlDataAdapter adapter;
            List<Persona> buscaditos = new List<Persona>();
            Persona buscado = null;

            try
            {
                _comm = new SqlCommand();
                _comm.Connection = _conn;

                _comm.CommandType = CommandType.StoredProcedure;
                _comm.CommandText = "sp_Personas_BuscarPorDniMatricula";

                _comm.Parameters.Add("@dniMatricula", SqlDbType.Decimal);
                _comm.Parameters[0].Value = dniMatricula;

                adapter = new SqlDataAdapter();
                adapter.SelectCommand = _comm;
                adapter.Fill(dtBuscados);

                foreach (DataRow personita in dtBuscados.Rows)
                {
                    buscado = new Persona();

                    buscado.IdPersona = int.Parse(personita["IdPersona"].ToString());
                    buscado.Nombre = personita["Nombre"].ToString();
                    buscado.Direccion = personita["Direccion"].ToString();
                    buscado.Telefono = personita["Telefono"].ToString();
                    buscado.Usuario = personita["Usuario"].ToString();
                    buscado.Contraseña = personita["Contraseña"].ToString();

                    buscaditos.Add(buscado);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                _conn.Close();
            }

            return buscaditos;
        }

        private static string crearCodigoAlfanumerico(Mascota pet)
        {
            string codigo = "";
            char[] nombreMascota = pet.Nombre.ToCharArray();
            char[] razaMascota = pet.Raza.ToCharArray();
            int cuantosCaracteresQuedan = 12;
            int tope = 3;

            if (pet.Nombre.Length == 2)
                tope = 2;

            //tiene 12 caracteres. Los primeros 3 corresponden al nombre de la mascota

            for (int i = 0; i < tope; i++)
            {
                codigo += nombreMascota[i];
            }

            if (tope == 2)
                codigo += "0";

            cuantosCaracteresQuedan -= 3;

            //los caracteres que siguen tiene que ver con el id de la mascota
            codigo += pet.IdMascota;
            cuantosCaracteresQuedan -= pet.IdMascota.ToString().Length;

            //los caracteres que siguen tienen que ver con la raza de la mascota
            for (int i = 0; i < 3; i++)
            {
                codigo += razaMascota[i];
            }


            cuantosCaracteresQuedan -= 3;

            //lo que sobra lo rellenamos con ceros
            for (int i = cuantosCaracteresQuedan; i > 0; i--)
            {
                codigo += "0";
            }

            return codigo;
        }
    }
}
